余烬缀记

使用 let's encrypt 生成泛域名 SSL

edited on:

本记录在 Debian 10 上通过,虽说是 Debian 但是其他 Linux 一样可以使用

# 安装 acme.sh

参考:https://github.com/Neilpang/acme.sh/wiki/How-to-install

# 从Git克隆
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
# 安装
./acme.sh --install  \
--home /usr/local/letsencrypt \
--config-home /usr/local/letsencrypt/data \
--cert-home  /var/www/ssl \
--accountemail  "[email protected]"

注意:

  • 此处安装在/usr/local/下,可能出现权限不足,证书存放在/var/www/

    sudo chown -R {username} /usr/local
    sudo chown -R {username} /usr/local
    

重启终端使别名生效

# 导出 ID

参考:https://github.com/Neilpang/acme.sh/wiki/dnsapi

这里采用 DNS 验证,域名是腾讯的所以采用腾讯云的 DNS 服务器,地址为https://www.dnspod.cn,在安全中心生成 API Token(API ID 和 API KEY)

在终端中输入生成环境变量

# 腾讯云 DNSPod
export DP_Id="13****"
export DP_Key="f047ab5************be455a82875e8"

# 生成证书

运行脚本 (注:如果测试需添加--test,否则次数过多容易被屏蔽几分钟)

acme.sh --issue \
--dns dns_dp \
-d {example.com} \
-d {*.example.com}
--force

最后输出以下的数据就完成

[Mon 23 Dec 2019 06:21:49 PM CST] Your cert is in  /var/www/ssl/{example.com}/{example.com}.cer
[Mon 23 Dec 2019 06:21:49 PM CST] Your cert key is in  /var/www/ssl/{example.com}/{example.com}.key
[Mon 23 Dec 2019 06:21:49 PM CST] The intermediate CA cert is in  /var/www/ssl/{example.com}/ca.cer
[Mon 23 Dec 2019 06:21:49 PM CST] And the full chain certs is there:  /var/www/ssl/{example.com}/fullchain.cer

# 可能出现的错误

  • acme.sh *.example.com:Verify error:CAA record for *.example.com prevents issuance

    这个错误具体原理我并不知道,但是是因为我域名解析里面使用了记录类型为 CNAME 导致的,将记录类型为 CNAME 的解析暂停后重新申请就可以了(注:DNSPOD 中 CNAME 暂停一段时间后会自动启用)

  • Create new order error. Le_OrderFinalize not found

    API 接口达到现在,暂时屏蔽了,需要等待一段时间,应该几分钟